引言
公司正式的服务器使用了深信服,本文介绍深信服服务器的连接方法
连接正式服务器需要的vpn软件为EasyConnect,这个软件第一坑的地方就是官方下载需要登录深信服社区;我直接拒绝
后面我找到腾讯的下载地址:EasyConnect下载:腾讯软件下载
第二个不便的地方是开启VPN后本机所有的外网都没了,在找EasyConnect的时候,我意外发现了这个开源项目:docker-easyconnect
本文主要使用此项目
默认的从客户端(A)连接到服务器(B)的方法是直接连接

开启EasyConnect后AB组成了一个局域网,导致A也没有网络了
而**docker-easyconnect**的作用是添加一个A1和服务器B通讯,而本机A只用和A1通讯,进而可以自由访问外网

参照网上的攻略:用docker封印EasyConnect并连接远程桌面和数据库 - Jortana的文章 - 知乎
可以在本机的docker实现这样的功能,攻略中的A1就是本机docker环境,也可以是wsl
但是我的PC没有docker,于是将A1独立出来,放到另外的测试服务器上
实际上A1的作用就是堡垒机,本文也是创建一个堡垒机.
配置完成后实现的功能:
- 本机可以百度搜索的同时连接深信服服务器
- 局域网多个客户端(终端)可以同时连接到服务器
- 可以直接使用
ssh连接正式服务器 - 可以直接连接到正式服务器上的任意本地服务比如数据库,因此就有直接debug正式服务的能力
解决方案
首先,参照官方方法安装安装docker-easyconnect
这里给出我的命令:
#192.168.1.101 为测试服务器Ip 即为A1docker run --rm --name easyconnect --device /dev/net/tun --cap-add NET_ADMIN -ti -p 192.168.1.101:1080:1080 -p 127.0.0.1:8888:8888 -e EC_VER=7.6.7 -e CLI_OPTS='-d https://11.22.33.44:123 -u ssss -p xxxx' hagb/docker-easyconnect:cli这是cli的连接方法
需要注意的是,知乎教程中用的是docker desktop,因此socket服务IP填的127.0.0.1,而我这里需要从外部访问测试服务器A1,因此1080端口的IP需调整为运行docker服务的地址,即192.168.1.101
假如一切正常,能看到user "ssss" login successfully!登录成功的提示
vnc登录
假如cli登录报错,可以使用vnc远程登录 官方文档有参数详细说明
我就遇到cli登录报错的问题:
/usr/local/bin/start.sh: line 152: tigervncpasswd: command not foundWARNING: logging deactivated (can't log to stdout when daemonized)/usr/local/bin/start.sh: line 158: tigervncserver: command not found/usr/local/bin/start.sh: line 170: xclip: command not foundauto login is disabledlogin failed!svpn stop!Terminatedauto login is disabledlogin failed!svpn stop!Terminatedauto login is disabledlogin failed!svpn stop!Terminated经后续测试,这里原因为密码过期,后台强制换密码导致无法登录

因此,使用VNC方法登录换过密码后就能用cli登录了
这里给出我的vnc命令:
docker run --rm --device /dev/net/tun --cap-add NET_ADMIN -ti -e PASSWORD=password -e DISABLE_PKG_VERSION_XML=1 -e URLWIN=1 -v $HOME/.ecdata:/root -p 192.168.1.101:5901:5901 -p 192.168.1.101:1080:1080 -p 127.0.0.1:8888:8888 hagb/docker-easyconnect:7.6.7其中password是vnc登录密码
arm64 和 mips64el 架构需要加入 -e DISABLE_PKG_VERSION_XML=1 参数
根据我这里的参数,使用vnc连接192.168.1.101:5901即可
配置Clash服务
还是可以参照知乎教程中Clash的配置方法,将IP改为192.168.1.101即可
我这里因为用到了订阅,因此使用Parsers
Parsers: prepend-rules: - IP-CIDR,192.168.0.11/32,深信服 append-proxies: - {name: easyConnect, server: 192.168.1.101, port: 1080, type: socks5} append-proxy-groups: - name: 深信服 type: select proxies: - easyConnect其中的prepend-rules我设置了固定的IP192.168.0.11,此为服务器IP地址;因为本地网段和服务器的网段会有冲突,因此手写了规则,如果网段不同则不需要
配置好后Update订阅即可看到Proxies

点击Check会发现Timeout,实际不影响
假如Clash的配置遇到问题可以看前文使用clash代理SSR的内网请求
配置Xshell
ssh的连接及正式服务器的服务连接使用xshell的功能
ssh连接服务器
假如xshell直连正式的服务器没问题可以跳过;我这里因为网段冲突及服务器本身是通过Clash连接的,因此需要额外配置
打开配置好的xshell的Session配置,右键Properties(属性)→Proxy(代理)→Browse(浏览)新增一个

Type(类型)选Sockes5
Host为docker-easyconnect服务(A1)的地址
ssh连接成功后可以在SSH Channel List(隧道窗格)中看到连接状态

SSH Channel List可以通过在底部快速命令处右键打开
使用ssh tunnel创建 Outgoing转移规则
转移规则介绍可查看:Xshell本地转移规则讲解
此设置的目的是将服务器的端口映射到本地,比如将服务器B上面5432端口的pgsql服务映射到本地5234,这样可以直接用DataGrip等数据库工具设置localhost:5234直连正式数据库
将上面的创建的SSH Session复制并打开Properties(属性)→SSH→Tunneling(隧道)新增一个

Type(类型)选择Local(Outgoing)
Sourse Host(源主机)填localhost 端口 5234
Destination Host(目标主机)填正式上需要访问的服务IP和端口
创建完开启Session连上服务器后可以看到Forwarding Rules(转移规则)的状态为Open

SSH Channel List可以通过在底部快速命令处右键打开
vnc登录
要代理VNC连接,只需参照ssh规则重新创建一个192.168.1.101:5901的转发规则即可

此规则会将easyconnect服务器(192.168.1.101)上的5901端口映射到本地5901端口
此时使用vnc客户端连接localhost:5901密码password即可
非127.0.0.1连接正式环境毕竟还是比较危险,所以我只在每次使用的时候开启docker-easyconnect服务,使用完毕立即停止